/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.cmf.controladores;

import com.cmf.model.Jugador;
import com.cmf.model.Pregunta;
import com.cmf.vista.EscaleraClaret;
import com.cmf.vista.Preguntas;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.border.MatteBorder;

/**
 *
 * @author jairo jose
 */
public class ControladorJuego {
    
    private int delay=250;
    private Timer animarCuadros,virificarGanador;
    private Jugador jugador;
    int n,i,mult,posicionInicial;
    private JPanel[] panels;
    private JLabel[] labels;
    private boolean sw=false;

    EscaleraClaret frame;

    public ControladorJuego(JLabel[] label, JPanel[] panel, int num, Jugador jugador, EscaleraClaret escalera) {//Constructor del controlador
        this.jugador=jugador;
        final boolean b=true;
        posicionInicial=this.jugador.getPuesto();
        n=num;
        i=0;
        panels=panel;
        labels=label;
        this.frame=escalera;
        mult=250*num;
        initTimer();//Inicializador del Temporizador
    }

    public ControladorJuego() {
    }

    


   /* 
    public void mostrarPregunta(JFrame frame, JLabel[] etiquetas,JPanel[] paneles, String num){
        for(int i=0;i<etiquetas.length;i++){
            if(etiquetas[i].getText().equals(num)){
                Archivo archivo=new Archivo();
                Pregunta pregunta=(Pregunta) archivo.abrir(num+".txt");
               // new Preguntas(frame,etiquetas[i],paneles[i], pregunta).setVisible(true);
                break;
            }
        }
    }*/

    public void mostrarPregunta(EscaleraClaret frame, JPanel paneles, String num){
        int pre=Integer.parseInt(num);
        
        if(pre<=30){
                Archivo archivo=new Archivo();
                Pregunta pregunta=(Pregunta) archivo.abrir(num+".txt");
                new Preguntas(frame,paneles,pregunta, frame.getTemp()).setVisible(true);

        }else
            if(pre>30 && pre<=66){
                
                Funciones f=new Funciones();
                Archivo archivo=new Archivo();
                Pregunta pregunta=(Pregunta) archivo.abrir(f.azar(30)+".txt");
                new Preguntas(frame,paneles,pregunta, frame.getTemp()).setVisible(true);
            }
        

    }



    public void contarCuadros(){
        if(frame.isTipo())
        virificarGanador.start();
        animarCuadros.start();
        int p=jugador.getAvance()+jugador.getPuesto();
        
    }
// EL TIMER YA ESTA BIEN TERMINADO RECUERDA MANDAR EL OBJETO DE JUGADOR CUANDO MUESTRES LAS PREGUNTAS
    private void initTimer() {
       
        int puesto=jugador.getPuesto();
        if(puesto==0)//Condicion Si arranca de la primera casilla 
            i=0;
        else
        if(puesto<panels.length){
            i=puesto;
            if(i<66){
                panels[i].setOpaque(true);
                panels[i].setBackground(Color.BLUE);
                panels[i].setBorder(new MatteBorder(3, 3, 3, 3, Color.MAGENTA));
                labels[i].setForeground(Color.ORANGE);
            }
        }
        animarCuadros=new Timer(250, new ActionListener() { /*hace la animacion de los cuadros que va avanzando*/
            boolean in=false;
            public void actionPerformed(ActionEvent e) {
                if(delay== mult){
                    in=true;
                    int p=jugador.getAvance()+jugador.getPuesto();
                    if(p<panels.length){
                        mostrarPregunta(frame,panels[p-1],labels[p-1].getText());//llama a metodo de mostrar preguntas
                    }
                    sw=true;
                    jugador.setPuesto(p);
                     animarCuadros.stop();
                     virificarGanador.stop();
                }
               
                if (i>0 && i<panels.length-1) {
                    
                    panels[i-1].setOpaque(false);
                    panels[i-1].setBackground(new Color(239, 239, 239));
                    panels[i-1].setBorder(new MatteBorder(3, 3, 3, 3, Color.red));
                    labels[i-1].setForeground(Color.white);
                }
                if(i<panels.length-1){//Condicion del segundo cuadro en adelante*/
                    
                    panels[i].setOpaque(true);
                    panels[i].setBackground(Color.BLUE);
                    panels[i].setBorder(new MatteBorder(3, 3, 3, 3, Color.MAGENTA));
                    labels[i].setForeground(Color.ORANGE);
                }
               
                i++;
                
                if(in==false){
                    delay+=250;
                }
               
            }
        });
        
        virificarGanador=new Timer(250, new ActionListener() {//verifica si hay ganador o indica cuantos cuadro le falta para ganar

            public void actionPerformed(ActionEvent e) {
                int p=jugador.getPuesto();
                int resta=67-p;
                if(((p==62&&n>5)||(p==63&&n>4)||(p==64&&n>3)||(p==65&&n>2)||(p==66&&n>1))&&sw==false){
                    for(int i=0;i<panels.length-1;i++){
                        animarCuadros.stop();
                        panels[i].setOpaque(false);
                        panels[i].setBackground(new Color(239, 239, 239));
                        panels[i].setBorder(new MatteBorder(3, 3, 3, 3, Color.red));
                        labels[i].setForeground(Color.white);
                        }
                        frame.setVisible(true);
                        frame.setEnabled(false);

                        JOptionPane.showMessageDialog(null, "...:::NECESITAS "+resta+ " PARA GANAR:::...");
                        frame.setVisible(true);
                        frame.setEnabled(true);
                        virificarGanador.stop();
                    
                    
                }
                    if(((p==62&&n==5)||(p==63&&n==4)||(p==64&&n==3)||(p==65&&n==2)||(p==66&&n==1))){
                        frame.getLanzar().setEnabled(false);
                        
                        String ganador="";
                        Jugador[] j=frame.getJugador();
                        for(int m=0;m<frame.getJugador().length;m++){
                            for(int k=0;k<j.length;k++){
                                if(j[m].getPuntaje()>=j[k].getPuntaje())
                                    ganador=j[m].getNombre();
                                else
                                    if(j[m].getPuntaje()<j[k].getPuntaje()){
                                        ganador=j[k].getNombre();
                                        break;
                                    }
                            }
                        }
                        
                        JOptionPane.showMessageDialog(null, "...:::GANADOR "+ganador.toUpperCase()+ ":::...");frame.setVisible(true);
                        frame.setEnabled(false);
                        frame.setVisible(true);
                        frame.setEnabled(true);
                    }
            }
        });
    }

}
